# coding: UTF-8
# @Date    ：2024/10/21 18:07 
# @File    : __init__.py
# @Author  : fum

import os


class TextFileUtils:
    @staticmethod
    def read_file(file_path: str) -> str:
        """
        读取文件内容并返回一个字符串。

        :param file_path: 文件路径
        :return: 文件内容字符串
        :raises FileNotFoundError: 如果文件不存在
        :raises IOError: 如果读取文件时发生错误
        """
        try:
            with open(file_path, 'r', encoding='utf-8') as file:
                return file.read()
        except FileNotFoundError:
            raise FileNotFoundError(f"文件 {file_path} 不存在")
        except IOError as e:
            raise IOError(f"读取文件 {file_path} 时发生错误: {e}")

    @staticmethod
    def read_lines(file_path: str) -> list:
        """
        按行读取文件内容并返回一个列表。

        :param file_path: 文件路径
        :return: 文件内容列表，每行一个元素
        :raises FileNotFoundError: 如果文件不存在
        :raises IOError: 如果读取文件时发生错误
        """
        try:
            with open(file_path, 'r', encoding='utf-8') as file:
                return [line.strip() for line in file.readlines()]
        except FileNotFoundError:
            raise FileNotFoundError(f"文件 {file_path} 不存在")
        except IOError as e:
            raise IOError(f"读取文件 {file_path} 时发生错误: {e}")

    @staticmethod
    def write_file(file_path: str, content: str) -> None:
        """
        将内容写入文件。

        :param file_path: 文件路径
        :param content: 要写入的内容
        :raises IOError: 如果写入文件时发生错误
        """
        try:
            with open(file_path, 'w', encoding='utf-8') as file:
                file.write(content)
        except IOError as e:
            raise IOError(f"写入文件 {file_path} 时发生错误: {e}")

    @staticmethod
    def append_to_file(file_path: str, content: str) -> None:
        """
        将内容追加到文件末尾。

        :param file_path: 文件路径
        :param content: 要追加的内容
        :raises IOError: 如果追加内容时发生错误
        """
        try:
            with open(file_path, 'a', encoding='utf-8') as file:
                file.write(content)
        except IOError as e:
            raise IOError(f"追加内容到文件 {file_path} 时发生错误: {e}")

    @staticmethod
    def file_exists(file_path: str) -> bool:
        """
        检查文件是否存在。

        :param file_path: 文件路径
        :return: 如果文件存在返回 True，否则返回 False
        """
        return os.path.isfile(file_path)

    @staticmethod
    def create_file(file_path: str) -> None:
        """
        创建一个空文件。

        :param file_path: 文件路径
        :raises IOError: 如果创建文件时发生错误
        """
        try:
            with open(file_path, 'w', encoding='utf-8') as file:
                pass  # 创建空文件
        except IOError as e:
            raise IOError(f"创建文件 {file_path} 时发生错误: {e}")

    @staticmethod
    def delete_file(file_path: str) -> None:
        """
        删除文件。

        :param file_path: 文件路径
        :raises FileNotFoundError: 如果文件不存在
        :raises IOError: 如果删除文件时发生错误
        """
        if not os.path.isfile(file_path):
            raise FileNotFoundError(f"文件 {file_path} 不存在")
        try:
            os.remove(file_path)
        except IOError as e:
            raise IOError(f"删除文件 {file_path} 时发生错误: {e}")

    @staticmethod
    def get_file_size(file_path: str) -> int:
        """
        获取文件大小（字节）。

        :param file_path: 文件路径
        :return: 文件大小（字节）
        :raises FileNotFoundError: 如果文件不存在
        """
        if not os.path.isfile(file_path):
            raise FileNotFoundError(f"文件 {file_path} 不存在")
        return os.path.getsize(file_path)
